package com.arpa.wms.service;

import com.arpa.core.web.Result;
import com.arpa.ntocc.common.common.util.UserUtil;
import com.arpa.ntocc.common.domain.vo.TreeData;
import com.arpa.wms.domain.dto.WarehouseDTO;
import com.arpa.wms.domain.entity.Warehouse;
import com.arpa.wms.domain.vo.WarehouseVO;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 仓库 服务类
 * </p>
 *
 * @author LEO
 * @since 2020-08-03
 */
public interface IWarehouseService extends IService<Warehouse> {

    /**
     * 保存
     * @param entity
     * @return
     */
    @Override
    boolean save(Warehouse entity);

    /**
     * 根据code更新实体
     * @param entity
     * @return
     */
    int updateByCode(Warehouse entity);

    /**
     * 通过code获取仓库信息
     * @param code
     * @return
     */
    Warehouse getByCode(String code);

    /**
     * 查询列表
     * @param warehouseDTO
     * @return
     */
    List<WarehouseVO> queryList(WarehouseDTO warehouseDTO);

    /**
     * 查询合计,包含总数
     * @param warehouseDTO
     * @return
     */
    WarehouseVO queryListSum(WarehouseDTO warehouseDTO);

    /**
     * 删除仓库
     * @param code
     */
    Result deleteByCode(List<String> code) throws Exception;


    /**
     * 启用仓库
     * @param codes 标识
     * @return
     */
    int activeStatus(List<String> codes);

    /**
     * 停用仓库
     * @param codes 标识
     * @return
     */
    Map<String,Object> unactiveStatus(List<String> codes);


    /**
     * 校验仓库信息
     * @param entity
     * @return
     */
    Result validateWarehouse(Warehouse entity);

    /**
     * 前台页面仓库下拉数据
     * 查询当前登录用户所属机构下启用，并开启库位管理的仓库
     * @return
     */
    List<WarehouseVO> findWarehouse();

    /**
     * 查询当前登录用户所属机构下启用，并开启库位管理的仓库
     * @return
     */
    List<WarehouseVO> findAllWarehouse();

    /**
     *  @author: Allen chen
     *  @Date: 2020/10/10 9:14
     *  @Description: 根据code批量查询
     */
    List<WarehouseVO> queryByCodes(List<String> codes);

    Map<String,Object> batchdel(List<String> codes);

    /**
     * 初始化临时库区、库位
     * @param warehouse
     * @return
     */
    Result initTempLocation(Warehouse warehouse);


    /**
     * 关闭“启用库位管理”状态
     * @param entity
     * @return
     */
    Result closeLocationManagement(Warehouse entity);

    /**
     * @description
     * oms获取所有仓库信息
     * @author xuyang
     * @date 2020/12/14 9:29
     * @param :
     **/
    List<WarehouseVO> findOmsWarehouse();

    /**
     * 获取仓库、货主级联数据
     * @return
     * @param userLoginType
     */
    List<TreeData> cascadeData(String userLoginType);

    /**
     * 查询列表不分页
     * @param warehouseDTO
     * @return
     */
    List<WarehouseVO> queryWarehouseList(WarehouseDTO warehouseDTO);
}
